home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / pm.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  7KB  |  244 lines

  1. /*
  2.  *  pm.h - Power management interface
  3.  *
  4.  *  Copyright (C) 2000 Andrew Henroid
  5.  *
  6.  *  This program is free software; you can redistribute it and/or modify
  7.  *  it under the terms of the GNU General Public License as published by
  8.  *  the Free Software Foundation; either version 2 of the License, or
  9.  *  (at your option) any later version.
  10.  *
  11.  *  This program is distributed in the hope that it will be useful,
  12.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  *  GNU General Public License for more details.
  15.  *
  16.  *  You should have received a copy of the GNU General Public License
  17.  *  along with this program; if not, write to the Free Software
  18.  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  19.  */
  20.  
  21. #ifndef _LINUX_PM_H
  22. #define _LINUX_PM_H
  23.  
  24. #ifdef __KERNEL__
  25.  
  26. #include <linux/config.h>
  27. #include <linux/list.h>
  28. #include <asm/atomic.h>
  29.  
  30. /*
  31.  * Power management requests... these are passed to pm_send_all() and friends.
  32.  *
  33.  * these functions are old and deprecated, see below.
  34.  */
  35. typedef int __bitwise pm_request_t;
  36.  
  37. #define PM_SUSPEND    ((__force pm_request_t) 1)    /* enter D1-D3 */
  38. #define PM_RESUME    ((__force pm_request_t) 2)    /* enter D0 */
  39.  
  40.  
  41. /*
  42.  * Device types... these are passed to pm_register
  43.  */
  44. typedef int __bitwise pm_dev_t;
  45.  
  46. #define PM_UNKNOWN_DEV    ((__force pm_dev_t) 0)    /* generic */
  47. #define PM_SYS_DEV    ((__force pm_dev_t) 1)    /* system device (fan, KB controller, ...) */
  48. #define PM_PCI_DEV    ((__force pm_dev_t) 2)    /* PCI device */
  49. #define PM_USB_DEV    ((__force pm_dev_t) 3)    /* USB device */
  50. #define PM_SCSI_DEV    ((__force pm_dev_t) 4)    /* SCSI device */
  51. #define PM_ISA_DEV    ((__force pm_dev_t) 5)    /* ISA device */
  52. #define    PM_MTD_DEV    ((__force pm_dev_t) 6)    /* Memory Technology Device */
  53.  
  54. /*
  55.  * System device hardware ID (PnP) values
  56.  */
  57. enum
  58. {
  59.     PM_SYS_UNKNOWN = 0x00000000, /* generic */
  60.     PM_SYS_KBC =     0x41d00303, /* keyboard controller */
  61.     PM_SYS_COM =     0x41d00500, /* serial port */
  62.     PM_SYS_IRDA =     0x41d00510, /* IRDA controller */
  63.     PM_SYS_FDC =     0x41d00700, /* floppy controller */
  64.     PM_SYS_VGA =     0x41d00900, /* VGA controller */
  65.     PM_SYS_PCMCIA =     0x41d00e00, /* PCMCIA controller */
  66. };
  67.  
  68. /*
  69.  * Device identifier
  70.  */
  71. #define PM_PCI_ID(dev) ((dev)->bus->number << 16 | (dev)->devfn)
  72.  
  73. /*
  74.  * Request handler callback
  75.  */
  76. struct pm_dev;
  77.  
  78. typedef int (*pm_callback)(struct pm_dev *dev, pm_request_t rqst, void *data);
  79.  
  80. /*
  81.  * Dynamic device information
  82.  */
  83. struct pm_dev
  84. {
  85.     pm_dev_t     type;
  86.     unsigned long     id;
  87.     pm_callback     callback;
  88.     void        *data;
  89.  
  90.     unsigned long     flags;
  91.     unsigned long     state;
  92.     unsigned long     prev_state;
  93.  
  94.     struct list_head entry;
  95. };
  96.  
  97. #ifdef CONFIG_PM
  98.  
  99. extern int pm_active;
  100.  
  101. #define PM_IS_ACTIVE() (pm_active != 0)
  102.  
  103. /*
  104.  * Register a device with power management
  105.  */
  106. struct pm_dev __deprecated *pm_register(pm_dev_t type, unsigned long id, pm_callback callback);
  107.  
  108. /*
  109.  * Unregister a device with power management
  110.  */
  111. void __deprecated pm_unregister(struct pm_dev *dev);
  112.  
  113. /*
  114.  * Unregister all devices with matching callback
  115.  */
  116. void __deprecated pm_unregister_all(pm_callback callback);
  117.  
  118. /*
  119.  * Send a request to a single device
  120.  */
  121. int __deprecated pm_send(struct pm_dev *dev, pm_request_t rqst, void *data);
  122.  
  123. /*
  124.  * Send a request to all devices
  125.  */
  126. int __deprecated pm_send_all(pm_request_t rqst, void *data);
  127.  
  128. #else /* CONFIG_PM */
  129.  
  130. #define PM_IS_ACTIVE() 0
  131.  
  132. static inline struct pm_dev *pm_register(pm_dev_t type,
  133.                      unsigned long id,
  134.                      pm_callback callback)
  135. {
  136.     return NULL;
  137. }
  138.  
  139. static inline void pm_unregister(struct pm_dev *dev) {}
  140.  
  141. static inline void pm_unregister_all(pm_callback callback) {}
  142.  
  143. static inline int pm_send(struct pm_dev *dev, pm_request_t rqst, void *data)
  144. {
  145.     return 0;
  146. }
  147.  
  148. static inline int pm_send_all(pm_request_t rqst, void *data)
  149. {
  150.     return 0;
  151. }
  152.  
  153. #endif /* CONFIG_PM */
  154.  
  155. /* Functions above this comment are list-based old-style power
  156.  * managment. Please avoid using them.  */
  157.  
  158. /*
  159.  * Callbacks for platform drivers to implement.
  160.  */
  161. extern void (*pm_idle)(void);
  162. extern void (*pm_power_off)(void);
  163.  
  164. typedef int __bitwise suspend_state_t;
  165.  
  166. #define PM_SUSPEND_ON        ((__force suspend_state_t) 0)
  167. #define PM_SUSPEND_STANDBY    ((__force suspend_state_t) 1)
  168. #define PM_SUSPEND_MEM        ((__force suspend_state_t) 3)
  169. #define PM_SUSPEND_DISK        ((__force suspend_state_t) 4)
  170. #define PM_SUSPEND_MAX        ((__force suspend_state_t) 5)
  171.  
  172. typedef int __bitwise suspend_disk_method_t;
  173.  
  174. #define    PM_DISK_FIRMWARE    ((__force suspend_disk_method_t) 1)
  175. #define    PM_DISK_PLATFORM    ((__force suspend_disk_method_t) 2)
  176. #define    PM_DISK_SHUTDOWN    ((__force suspend_disk_method_t) 3)
  177. #define    PM_DISK_REBOOT        ((__force suspend_disk_method_t) 4)
  178. #define    PM_DISK_MAX        ((__force suspend_disk_method_t) 5)
  179.  
  180. struct pm_ops {
  181.     suspend_disk_method_t pm_disk_mode;
  182.     int (*prepare)(suspend_state_t state);
  183.     int (*enter)(suspend_state_t state);
  184.     int (*finish)(suspend_state_t state);
  185. };
  186.  
  187. extern void pm_set_ops(struct pm_ops *);
  188.  
  189. extern int pm_suspend(suspend_state_t state);
  190.  
  191.  
  192. /*
  193.  * Device power management
  194.  */
  195.  
  196. struct device;
  197.  
  198. typedef u32 __bitwise pm_message_t;
  199.  
  200. /*
  201.  * There are 4 important states driver can be in:
  202.  * ON     -- driver is working
  203.  * FREEZE -- stop operations and apply whatever policy is applicable to a suspended driver
  204.  *           of that class, freeze queues for block like IDE does, drop packets for
  205.  *           ethernet, etc... stop DMA engine too etc... so a consistent image can be
  206.  *           saved; but do not power any hardware down.
  207.  * SUSPEND - like FREEZE, but hardware is doing as much powersaving as possible. Roughly
  208.  *           pci D3.
  209.  *
  210.  * Unfortunately, current drivers only recognize numeric values 0 (ON) and 3 (SUSPEND).
  211.  * We'll need to fix the drivers. So yes, putting 3 to all diferent defines is intentional,
  212.  * and will go away as soon as drivers are fixed. Also note that typedef is neccessary,
  213.  * we'll probably want to switch to
  214.  *   typedef struct pm_message_t { int event; int flags; } pm_message_t
  215.  * or something similar soon.
  216.  */
  217.  
  218. #define PMSG_FREEZE    ((__force pm_message_t) 3)
  219. #define PMSG_SUSPEND    ((__force pm_message_t) 3)
  220. #define PMSG_ON        ((__force pm_message_t) 0)
  221.  
  222. struct dev_pm_info {
  223.     pm_message_t        power_state;
  224. #ifdef    CONFIG_PM
  225.     pm_message_t        prev_state;
  226.     void            * saved_state;
  227.     atomic_t        pm_users;
  228.     struct device        * pm_parent;
  229.     struct list_head    entry;
  230. #endif
  231. };
  232.  
  233. extern void device_pm_set_parent(struct device * dev, struct device * parent);
  234.  
  235. extern int device_suspend(pm_message_t state);
  236. extern int device_power_down(pm_message_t state);
  237. extern void device_power_up(void);
  238. extern void device_resume(void);
  239.  
  240.  
  241. #endif /* __KERNEL__ */
  242.  
  243. #endif /* _LINUX_PM_H */
  244.